Today's standard computer architecture calls for a number of separate components, such as a central processing unit ("CPU"), memory, ports and peripheral devices to be coupled together by electrical buses to provide a pathway for data between the various components. Electrical buses are simply groups of conductors (or lines) designed to operate as a group.
In typical computer architectures, there are address buses, data buses and control buses. Address buses are designed to transmit address data to allow selection of devices and memory locations for data transfer. Data buses carry the substantive data to be transferred. Control buses transmit control signals to allow for synchronization and priority among the various components of the computer, allowing them to work in concert.
Components transmit data over buses by changing voltages on the various lines of the bus. In binary digital computers, each line in a bus is capable of assuming one of two possible states at a given moment. These states are represented by presence or absence of a voltage, or potential difference relative to ground, on each of the lines. In some schemes, the presence of a voltage denotes a change from one state to the other, while the absence of a voltage denotes no change (as in Manchester coding).
During operation, each particular line may change between binary one and binary zero many millions of times a second. It is vital to preserve the integrity and fidelity of the data transmitted over the bus. Therefore, it is vital that transitions between binary one and binary zero be fast and sure. In an ideal world, the bus changes voltages instantaneously and data is transmitted reliably.
Unfortunately, in the real world, buses are real electrical conductors and therefore contain impedence just as do all real conductors. This impedence traps electrical charge within the line, presenting, in a sense, a momentum against which the change must take place. When the line is directed to change from a binary one to a binary zero (meaning a grounding of the line), it resists the change, typically causing a voltage oscillation at the point of transition (termed "ringing"). This ringing may be of sufficient magnitude as to cause components reading data from the bus to misread the oscillation as the presence of a voltage (a binary one) instead of the intended binary zero, thereby corrupting the flow of data.
Therefore, in such conductors, it is standard practice to provide a means by which to dissipate the electrical charge quickly and damp the ringing, so as to restore data transmission fidelity. Damping is achieved through use of a terminating circuit, which can comprise a plurality of resistive elements or active switches.
Some buses require terminating circuits at each end of the bus to provide effective damping. One such bus standard is the small computer systems interface ("SCSI") bus. The SCSI bus is designed to operate in conjunction with microcomputers (also termed personal computers or "PCs") to provide an interface to SCSI standard peripheral devices. SCSI buses require a controller or host card to manage communication of data between the PC and the SCSI devices and between the SCSI devices themselves. In PCs, this controller card is typically placed in a slot within the main chassis of the PC. The controller card contains a control circuit that manages the SCSI bus and at least one SCSI port allowing SCSI devices to couple to the card. SCSI devices are daisy chained together with a common cable. All SCSI devices operate on common signals, and both ends of the cable are terminated with hardware terminating circuits. The terminating circuits, that can be connected to either SCSI devices or to the SCSI cable itself are, as stated above, required to make data transfers on the SCSI bus reliable.
Devices connected to SCSI chains must have the correct number of terminating circuits for proper operation and to prevent damage to the SCSI controller. There can be no more than two terminating circuits in a chain of SCSI devices, one at each end of the physical chain. This means that, if more than two SCSI devices are connected in an SCSI daisy chain, the middle device(s) in the cable must not have terminating circuits coupled to the SCSI bus.
Some controller cards provide two SCSI ports. One port (the "external port") is fitted on a mounting bracket attached to the card, thereby exposing it outside the main chassis when the card is mounted therein. This arrangement allows SCSI devices external to the main chassis to couple to the controller card via the external port. Another port (the "internal port") is mounted to the controller card such that it is exposed in the interior of the main chassis, allowing SCSI devices to be physically mounted within the main chassis and coupled to the internal port.
Since the SCSI bus must be terminated at each end, if both the internal and external ports of the controller card are coupled to SCSI devices, terminating circuits are required at the respective devices. In this case, the controller card is not at the end of the bus and no terminating circuit should be placed on the bus at the controller card. On the other hand, if either one (but not the other) of the external or internal ports is coupled to an SCSI device, then the controller card is at an end of the SCSI bus and a terminating circuit should be placed on the bus at the controller card.
In the past, the user was required to flip configuration switches, install hardware jumpers, or install terminating devices on the controller card to place a terminating circuit on the card when the card was at the end of the bus. If the user then added or subtracted SCSI devices, the configuration switches may have had to be manually changed, depending upon whether the controller card was at the end of the bus or not.
It is undesirable to force a user, who may not be knowledgeable about SCSI buses and their need for termination and who may be uncomfortable with invading the main chassis to flip configuration switches, install jumpers or terminating devices. It is much more preferable to provide a means by which the controller card can automatically determine whether SCSI devices are coupled to its ports and either couple to decouple a terminating circuit to the SCSI bus as a function of the determination.